from docx import Document
from docx.shared import RGBColor, Pt
import shutil
import os
import random


def insert_score_comment_to_docx(input_path, output_path, score, comment):
    try:
        doc = Document(input_path)
        # 在第一页顶部插入段落，红色字体，字号14
        p = doc.paragraphs[0].insert_paragraph_before(f"成绩：{score}，评语：{comment}")
        run = p.runs[0]
        run.font.color.rgb = RGBColor(255, 0, 0)  # 注意这里使用 docx.shared.RGBColor
        run.font.size = Pt(14)

        doc.save(output_path)
        print(f"[Word] 成功处理：{output_path}")
        return 1
    except Exception as e:
        print(f"[Word] 处理失败：{input_path}，错误：{e}")
        return 0


def batch_process_word(
    input_dir,
    output_dir,
    good_comments,
    middle_comments,
    good_names,
    good_score_range=(97, 99),
    middle_score_range=(94, 96),
    unprocessed_dir=None
):
    os.makedirs(output_dir, exist_ok=True)
    if unprocessed_dir:
        os.makedirs(unprocessed_dir, exist_ok=True)

    results = []

    for filename in os.listdir(input_dir):
        if not filename.endswith(".docx"):
            continue

        file_path = os.path.join(input_dir, filename)
        output_path = os.path.join(output_dir, filename)

        is_good = any(name in filename for name in good_names)

        if is_good:
            score = random.randint(*good_score_range)
            comment = random.choice(good_comments)
        else:
            score = random.randint(*middle_score_range)
            comment = random.choice(middle_comments)

        flag = insert_score_comment_to_docx(file_path, output_path, score, comment)

        if flag == 0 and unprocessed_dir:
            shutil.copy(file_path, os.path.join(unprocessed_dir, filename))
            score = 0

        results.append((filename, score))

    return results


if __name__ == "__main__":
    input_dir = "/Users/anyi/Desktop/1/Word大作业"  # 输入文件夹路径
    output_dir = "/Users/anyi/Desktop/1/1_out/Word大作业"  # 输出文件夹路径
    unprocessed_dir = "/Users/anyi/Desktop/1/1_out/Word大作业/未处理"

    comments_better = [
        (
            "文档结构严谨，条理清晰，内容丰富详实，能够系统性地展示主题核心观点。\n"
            "排版规范，段落分明，字体字号合理，格式统一，提升了整体阅读体验。\n"
            "语言表达准确流畅，逻辑严密，充分体现了良好的资料整合与专业写作能力。\n"
        ),
        (
            "内容完整且重点突出，论据充分，分析深入，有理有据，展示了较高的学术水平。\n"
            "文档格式规范，表格和图示使用恰当，有效辅助了文本内容的表达。\n"
            "表达简洁明了，语言规范，风格统一，展现了扎实的写作功底和思维逻辑。\n"
        ),
        (
            "文档层次分明，结构合理，信息组织良好，内容详尽且重点突出。\n"
            "排版美观，字体和行距设置合理，图表清晰，整体视觉效果佳。\n"
            "语言表达流畅，论述有深度，能够清晰传达作者观点，体现出较强的写作能力。\n"
        ),
        (
            "报告内容充实，论点明确，分析细致，支持材料充分且有效。\n"
            "格式规范，段落衔接自然，引用得当，文档整体质量较高。\n"
            "语言精炼，逻辑严密，文风正式，展现了良好的学术规范和写作素养。\n"
        ),
        (
            "文档结构完整，内容详实，条理清楚，重点突出，能够清晰传达研究或工作成果。\n"
            "排版整齐，图表和文字配合合理，格式符合规范要求，整体效果优良。\n"
            "语言规范，表达准确，逻辑清晰，体现了扎实的文字组织与表达能力。\n"
        )
    ]

    comments_middle = [
        (
            "文档结构较为清晰，内容涵盖全面，重点基本突出。\n"
            "排版整齐，字体和格式较为统一，整体美观大方。\n"
            "语言表达流畅，逻辑性较好，具备良好的写作基础。\n"
        ),
        (
            "内容较为完整，论述合理，能够较好地传达主题思想。\n"
            "格式规范，图表和文字配合协调，辅助说明内容。\n"
            "表达简洁明了，条理清晰，展示出扎实的写作能力。\n"
        ),
        (
            "文档层次分明，结构合理，信息组织良好，内容丰富。\n"
            "排版美观，字体和行距设置合理，整体视觉效果良好。\n"
            "语言表达自然流畅，观点明确，具备一定的分析能力。\n"
        ),
        (
            "报告内容充实，论点清晰，分析合理，材料支持充分。\n"
            "格式规范，段落衔接顺畅，文档整体质量较好。\n"
            "语言准确，逻辑清晰，体现出良好的写作素养和规范意识。\n"
        ),
        (
            "文档结构完整，内容详实，条理清楚，能够较好地传达核心观点。\n"
            "排版整齐，图表配合合理，格式符合一般规范要求。\n"
            "语言规范，表达准确，整体呈现良好写作水平。\n"
        )
    ]


    good_student_name = [
        "张三", "李四", "王五", "赵六", "孙七", "周八", "吴九",
        "郑十", "钱一", "冯二", "陈三", "褚四", "卫五",
        "蒋六", "沈七", "韩八", "杨九"
    ]
    results = batch_process_word(
        input_dir, output_dir,
        comments_better, comments_middle,
        good_student_name,
        unprocessed_dir=unprocessed_dir
    )

    for name, score in results:
        print(f"{name}: {score}")

    with open(os.path.join(output_dir, "score_list.csv"), "w", encoding="utf-8") as f:
        f.write("姓名,分数\n")
        for name, score in results:
            f.write(f"{name},{score}\n")
